package com.nowcoder.community.util;

public class RedisKeyUtil {

    private static final String SPLIT = ":";  //拼接key的符号

    private static final String PREFIX_ENTITY_LIKE = "like:entity";//实体（包括帖子和评论）的赞的前缀

    private static final String PREFIX_USER_LIKE = "like:user";//用户赞前缀

    private static final String PREFIX_FOLLOWEE = "followee";//A关注B中的A（关注者）前缀

    private static final String PREFIX_FOLLOWER = "follower";//B被A关注中的B（被关注者）

    private static final String PREFIX_KAPYCHA = "kaptcha";//验证码

    private static final String PREFIX_TICKET = "ticket";//登录凭证

    private static final String PREFIX_USER = "user";//用户

    private static final String PREFIX_UV = "uv";//独立访客

    private static final String PREFIX_DAU = "dau";//日活跃用户

    private static final String PREFIX_POST = "post";//帖子的key的前缀


    //某个实体的赞
    //like:entity:entityType:entityId 表示实体被赞的key，value表示userId    set(userId)
    public static String getEntityLikeKey(int entityType, int entityId){
        return PREFIX_ENTITY_LIKE + SPLIT + entityType + SPLIT + entityId;
    }

    //某个用户的赞
    //like:user:userId 表示当前用户被赞的key，value是一个整数，表示当前用户获赞的数量或这是当前是否被赞
    public static String getUserLikeKey(int userId){
        return PREFIX_USER_LIKE + SPLIT + userId;
    }

    //某个用户关注的实体的key
    //followee:userId:entityType:entityId作为关注的key，使用zset（有序集合）的方式，
    // value是entityId（可能是用户、帖子或评论），按照关注的当前时间排序
    public static String getFolloweeKey(int userId, int entityType){
        return PREFIX_FOLLOWEE + SPLIT + userId + SPLIT + entityType;
    }

    //某个实体的key（被关注的实体，可能是用户、帖子或评论）拥有的粉丝（关注者）
    //follower:entityType:entityId:userId作为关注的key，使用zset（有序集合）的方式，
    // value是userId，按照关注的当前时间排序
    public static String getFollowerKey(int entityType, int entityId){
        return PREFIX_FOLLOWER + SPLIT + entityType + SPLIT + entityId;
    }

    //生成验证码的key，value为验证码
    public static String getKaptchaKey(String owner){//owner：登录凭证
        return PREFIX_KAPYCHA + SPLIT + owner;
    }

    //生成登录凭证的key，value为登录凭证的实例
    public static String getTicketKey(String ticket){
        return PREFIX_TICKET + SPLIT + ticket;
    }

    //生成用户的key，value为user实例
    public static String getUserKey(int userId){
        return PREFIX_USER + SPLIT + userId;
    }

    //单日UV的key
    //date：指定日期
    public static String getUVKey(String date){
        return PREFIX_UV + SPLIT + date;
    }

    //日期区间UV的key
    //startDate：开始日期；endDate：结束日期
    public static String getUVKey(String startDate, String endDate){
        return PREFIX_UV + SPLIT + startDate + SPLIT + endDate;
    }

    //单日活动用户的key
    //date：指定日期
    public static String getDAUKey(String date){
        return PREFIX_DAU + SPLIT + date;
    }

    //日期区间内活动用户的key
    //startDate：开始日期；endDate：结束日期
    public static String getDAUKey(String startDate, String endDate){
        return PREFIX_DAU + SPLIT + startDate + SPLIT + endDate;
    }

    //帖子分数的key
    public static String getPostScoreKey(){
        return PREFIX_POST + SPLIT + "score";
    }
}
